compute percolation and capilalry rise
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer(kind=short), | intent(in) | :: | id |
soil balance id |
||
integer(kind=short), | intent(in) | :: | i | |||
integer(kind=short), | intent(in) | :: | j | |||
real(kind=float), | intent(in) | :: | rain | |||
type(grid_real), | intent(in) | :: | vadose |
vadose zone depth |
||
type(grid_real), | intent(in) | :: | pet |
potential evapotranspiration |
||
real(kind=double), | intent(out) | :: | soilDepthCell | |||
real(kind=float), | intent(out) | :: | percolationcellRZ | |||
real(kind=float), | intent(out) | :: | percolationcellTZ | |||
real(kind=double), | intent(out) | :: | runoffcell |
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
real(kind=float), | public | :: | conductivityCellRZ |
partial saturation soil hydraulic |
|||
real(kind=float), | public | :: | conductivityCellTZ |
partial saturation soil hydraulic |
|||
real(kind=float), | public | :: | dsdt | ||||
real(kind=float), | public | :: | meanHydCond |
mean hydraulic conductivity used to |
|||
real(kind=float), | public | :: | psiCell |
matric potential of current cell [m] |
|||
real(kind=float), | public | :: | smAdjustedRZ |
used to prevent soil moisture going to zero |
|||
real(kind=float), | public | :: | smAdjustedTZ |
used to prevent soil moisture going to zero |
SUBROUTINE PercolationAndCaprise & ! (id, i, j, rain, vadose, pet, soilDepthCell, percolationcellRZ, & percolationcellTZ, runoffcell) IMPLICIT NONE ! Arguments with intent(in): INTEGER (KIND = short), INTENT(IN) :: id !!soil balance id INTEGER (KIND = short), INTENT(IN) :: i,j REAL (KIND = float), INTENT(IN) :: rain TYPE (grid_real), INTENT(IN) :: vadose !!vadose zone depth TYPE (grid_real), INTENT(IN) :: pet !!potential evapotranspiration !Arguments with intent(out): REAL (KIND = double), INTENT(OUT) :: soilDepthCell REAL (KIND = float), INTENT(OUT) :: percolationcellRZ REAL (KIND = float), INTENT(OUT) :: percolationcellTZ REAL (KIND = double), INTENT(OUT) :: runoffcell !Local declaration: REAL (KIND = float) :: smAdjustedRZ !! used to prevent soil moisture going to zero REAL (KIND = float) :: smAdjustedTZ !! used to prevent soil moisture going to zero REAL (KIND = float) :: conductivityCellRZ !!partial saturation soil hydraulic !conductivity of current cell [m/s] REAL (KIND = float) :: conductivityCellTZ !!partial saturation soil hydraulic !conductivity of current cell [m/s] !conductivity of current cell [m/s] REAL (KIND = float) :: psiCell !!matric potential of current cell [m] REAL (KIND = float) :: meanHydCond !!mean hydraulic conductivity used to !compute capillary rise [m/s] REAL (KIND = float) :: dsdt !------------end of declaration------------------------------------------------ !calculate unsaturated hydraulic conductivity [m/s] !root zone IF (soilMoistureRZ % mat(i,j) <= thetar % mat(i,j)) THEN smAdjustedRZ = thetar % mat(i,j) + 0.001 ELSE smAdjustedRZ = soilMoistureRZ % mat(i,j) END IF conductivityCellRZ = UnsHydCond (ksat = ksat % mat(i,j), & theta = smAdjustedRZ, & thetas = thetas % mat(i,j), & thetar = thetar % mat(i,j), & psdi = psdi % mat(i,j) ) !transmission zone IF (soilMoistureTZ % mat(i,j) <= thetar % mat(i,j)) THEN smAdjustedTZ = thetar % mat(i,j) + 0.001 ELSE smAdjustedTZ = soilMoistureTZ % mat(i,j) END IF conductivityCellTZ = UnsHydCond (ksat = ksat % mat(i,j), & theta = smAdjustedTZ, & thetas = thetas % mat(i,j), & thetar = thetar % mat(i,j), & psdi = psdi % mat(i,j) ) IF (id == LANDPLAIN ) THEN !set local soil depth !soilDepthCell = MIN (soildepth % mat(i,j), vadose % mat(i,j) ) soilDepthCell = soildepth % mat(i,j) !compute root zone soil suction (m) psiCell = Psi (psic = psic % mat(i,j), theta = smAdjustedRZ, & thetas = thetas % mat(i,j), & thetar = thetar % mat(i,j), & psdi = psdi % mat(i,j) ) !Compute harmonic mean among saturated conductivity !at the interface with groundwater table and unsaturated !conductivity of vadose zone meanHydCond = 2. * conductivityCellRZ * ksat % mat(i,j) / & (conductivityCellRZ + Ksat % mat(i,j)) !compute capillary rise and percolation IF ( vadose % mat (i,j) < soilDepthRZ % mat (i,j) ) THEN ! water table depth lies within the root zone or above ground saturatedByGroundwater = .TRUE. ELSE capRise % mat (i,j) = meanHydCond * psiCell / vadose % mat (i,j) dsdt = ( soilMoistureRZ % mat(i,j) - thetar % mat(i,j) ) * & soilDepthRZ % mat(i,j) / dtSoilBalance percolationcellRZ = MIN ( conductivityCellRZ, dsdt) dsdt = ( soilMoistureTZ % mat(i,j) - thetar % mat(i,j) ) * & soilDepthTZ % mat(i,j) / dtSoilBalance percolationcellTZ = MIN ( conductivityCellTZ, dsdt) * & percolationFactor % mat (i,j) saturatedByGroundwater = .FALSE. END IF ELSE !slope or channel cell soilDepthCell = soilDepth % mat(i,j) capRise % mat(i,j) = 0. dsdt = ( soilMoistureRZ % mat(i,j) - thetar % mat(i,j) ) * & soilDepthRZ % mat(i,j) / dtSoilBalance percolationcellRZ = MIN ( conductivityCellRZ, dsdt) dsdt = ( soilMoistureTZ % mat(i,j) - thetar % mat(i,j) ) * & soilDepthTZ % mat(i,j) / dtSoilBalance percolationcellTZ = MIN ( ksat % mat(i,j), dsdt) * & percolationFactor % mat (i,j) END IF RETURN END SUBROUTINE PercolationAndCaprise